package com.hauwei.huaweishop.service.impl;

import com.hauwei.huaweishop.dao.UsersDao;
import com.hauwei.huaweishop.entity.Users;
import com.hauwei.huaweishop.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

import java.sql.Date;
import java.util.List;

@Service
@Transactional
public class UsersServiceImpl implements UsersService {
    @Autowired
    private UsersDao usersDao;

    @Override
    public void addUsers(Users users) {
        usersDao.addUsers(users);
    }

    @Override
    public void deleteUsersByUid(Integer uid) {
        usersDao.deleteUsersByUid(uid);
    }

    @Override
    public void updateUsers(Users users) {
        usersDao.updateUsers(users);
    }

    @Override
    @Transactional(propagation = Propagation.SUPPORTS)
    public List<Users> queryUsersPage(int pageNum, int pageSize) {
        // 查询全部数据
        List<Users> usersList = usersDao.queryUsersList();
        // 从第几条数据开始
        int firstIndex = (pageNum - 1) * pageSize;
        // 到第几条数据结束
        int lastIndex = pageNum * pageSize;
        return usersList.subList(firstIndex, lastIndex);
    }

    @Override
    public List<Users> queryUsersList() {
        return usersDao.queryUsersList();
    }

    @Override
    public Users queryByUsenamer(String username) {
        return usersDao.queryByUsername(username);
    }

    @Override
    public Users queryByUid(Integer uid) {
        return usersDao.queryByUid(uid);
    }

    /**
     * 用户登录方法
     * @param users
     * @return
     */
    @Override
    public Users toLogin(Users users) {
        // 查询数据库里用户数据
        Users userDB = usersDao.queryByUsername(users.getUsername());
            if (!ObjectUtils.isEmpty(userDB)){ // 如果用户不为空
                // 验证密码
                if (users.getPassword().equals(userDB.getPassword())){ // 如果 密码相同
                    // 返回数据库查询的用户信息
                    return userDB;
                }else {
                    throw new RuntimeException("用户密码错误!!!");
                }
            }
            // 用户为空，抛出异常
            throw new RuntimeException("用户名不存在!!!");
    }

    /**
     * 用户注册方法
     * @param user
     */
    @Override
    public void register(Users user) {
        // 查看用户是否存在
        Users userDB = usersDao.queryByUsername(user.getUsername());
        if (userDB == null){
            // 生成用户状态
            // 设置用户注册时间
            user.setRegistetime(new Date(new java.util.Date().getDate()));
            // 添加用户
            usersDao.addUsers(user);
        }else {
            throw new RuntimeException("用户已存在");
        }
    }

    @Override
    public void deleteUsersByUname(String uname) {
        usersDao.deleteUsersByUname(uname);
    }
}
